home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / esc.jar / com / extensibility / xml / SOX2Flavor.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-06-30  |  10.3 KB  |  303 lines

  1. package com.extensibility.xml;
  2.  
  3. import com.commerceone.util.net.MalformedURIException;
  4. import com.commerceone.xdk.base.parser.DirectorySearchURIDomain;
  5. import com.commerceone.xdk.base.parser.FileURIDomain;
  6. import com.extensibility.util.StringUtilities;
  7. import com.extensibility.xml.dt.DataType;
  8. import com.extensibility.xml.dt.DataTypeEnumeration;
  9. import com.extensibility.xml.dt.DataTypeFactory;
  10. import com.extensibility.xml.dt.DataTypeIntf;
  11. import com.extensibility.xml.dt.Facet;
  12. import java.io.File;
  13. import java.io.FileNotFoundException;
  14. import java.io.IOException;
  15. import java.io.Writer;
  16. import java.util.Enumeration;
  17. import java.util.Hashtable;
  18. import java.util.Vector;
  19.  
  20. class SOX2Flavor extends BaseFlavor {
  21.    static String NAME = "sox";
  22.    public static final String[] SOX_ALL_TYPES;
  23.    public static final String[] SOX_OTHER_TYPES;
  24.    public static final String[] SOX_SIMPLE_TYPES;
  25.    public static final String[] SOX_ATTR_TYPES;
  26.    static Hashtable soxSourceNames;
  27.  
  28.    SOX2Flavor(SchemaIntf var1) {
  29.       super(var1);
  30.    }
  31.  
  32.    public String getFlavorName() {
  33.       return NAME;
  34.    }
  35.  
  36.    public void parse(URI var1, URI var2, int var3, Object var4) throws IOException {
  37.       try {
  38.          (new SOX2Reader(super.schema)).parse(var1, var2);
  39.       } catch (IOException var6) {
  40.          throw var6;
  41.       }
  42.    }
  43.  
  44.    public void doSecondPassValidation(URI var1) {
  45.       Object var2 = null;
  46.       Object var3 = null;
  47.       String var6;
  48.       URI var7;
  49.       if (var1 == null) {
  50.          var6 = super.schema.getURI().toSource();
  51.          var7 = super.schema.getURI();
  52.       } else {
  53.          var6 = var1.toSource();
  54.          var7 = var1;
  55.       }
  56.  
  57.       if (var6 != null && var6.length() > 0) {
  58.          try {
  59.             (new SOX2cxpValidator(super.schema)).parse(var7);
  60.          } catch (Exception var5) {
  61.          }
  62.       }
  63.  
  64.    }
  65.  
  66.    public void write(Writer var1) throws IOException {
  67.       this.write(var1, super.schema.getURI());
  68.    }
  69.  
  70.    public void write(Writer var1, URI var2) throws IOException {
  71.       (new SOX2Writer(super.schema, var2)).writeDocument(var1);
  72.    }
  73.  
  74.    public String getSourcePreview(BaseDeclaration var1) {
  75.       return (new SOX2Writer(super.schema)).getSourcePreview(var1);
  76.    }
  77.  
  78.    public BaseExemplar createExemplar(SchemaIntf var1) {
  79.       return super.createExemplar(var1);
  80.    }
  81.  
  82.    public boolean isSupported(Class var1) {
  83.       return !var1.equals(Class.forName("com.extensibility.xml.GeneralEntityDeclaration")) && !var1.equals(Class.forName("com.extensibility.xml.InternalGEDeclaration")) && !var1.equals(Class.forName("com.extensibility.xml.ExternalGEDeclaration")) && !var1.equals(Class.forName("com.extensibility.xml.ParameterEntityDeclaration")) && !var1.equals(Class.forName("com.extensibility.xml.InternalPEDeclaration")) && !var1.equals(Class.forName("com.extensibility.xml.ExternalPEDeclaration")) && !var1.equals(Class.forName("com.extensibility.xml.NotationDeclaration"));
  84.    }
  85.  
  86.    private boolean isIntrinsicDtName(String var1) {
  87.       for(int var2 = 0; var2 < SOX_ALL_TYPES.length; ++var2) {
  88.          String var3 = BaseFlavor.getDisplay(this.getFlavorName(), SOX_ALL_TYPES[var2]);
  89.          if (var3.equals(var1)) {
  90.             return true;
  91.          }
  92.       }
  93.  
  94.       return false;
  95.    }
  96.  
  97.    private void checkForErrors(BaseDeclaration var1, DataType var2) {
  98.    }
  99.  
  100.    public void checkForErrors(BaseDeclaration var1) {
  101.       super.checkForErrors(var1);
  102.       if (var1 instanceof ElementDeclaration) {
  103.          ElementDeclaration var2 = (ElementDeclaration)var1;
  104.          ContentModel var3 = var2.getEffectiveModel();
  105.          if (this.isIntrinsicDtName(((BaseDeclaration)var2).getName())) {
  106.             var1.addError(new ParserException(999, "Name should not be an intrinsic datatype name."));
  107.          }
  108.  
  109.          if (var3.isMixed()) {
  110.             var1.addError(new ParserException(999, "Mixed models (text and elements together) are not permitted in SOX schemas."));
  111.          }
  112.  
  113.          if (var2.getAllowsTags() && var3.getRootGroup() != null && var3.getRootGroup().getOccurance() != 0) {
  114.             var1.addError(new ParserException(999, "Top level groups must not have occurrance in SOX Schemas."));
  115.          }
  116.  
  117.          if (var3.isTagsOnly()) {
  118.          }
  119.  
  120.          this.checkForErrors(var1, var2.getDataType());
  121.       } else if (var1 instanceof AttributeDeclaration) {
  122.          AttributeDeclaration var7 = (AttributeDeclaration)var1;
  123.          String var10 = var7.getDataType().toString();
  124.          DataType var4 = var7.getDataType();
  125.          if (var4 == null) {
  126.             var1.addError(new ParserException(999, "Attributes must have a datatype specified in SOX schemas."));
  127.          } else if (var4.hasFacet(Facet.FACET_ENUM_NAME) && (var4.getSource().equalsIgnoreCase(DataTypeIntf.NMTOKEN) || var4.getSource().equalsIgnoreCase(DataTypeIntf.NMTOKENS))) {
  128.             Vector var5 = ((AttributeDeclaration)var1).getChoices();
  129.             if (var5 != null && var5.size() > 0) {
  130.                for(int var6 = 0; var6 < var5.size(); ++var6) {
  131.                   if (!DTDParser.isNmToken((String)var5.elementAt(var6))) {
  132.                      var1.addError(new ParserException(217, (String)var5.elementAt(var6)));
  133.                   }
  134.                }
  135.             } else {
  136.                var1.addError(new ParserException(233, ""));
  137.             }
  138.          }
  139.  
  140.          this.checkForErrors(var1, var7.getDataType());
  141.       } else if (var1 instanceof NamespaceDeclaration) {
  142.          NamespaceDeclaration var8 = (NamespaceDeclaration)var1;
  143.       } else if (var1 instanceof DataTypeDeclaration) {
  144.          DataTypeDeclaration var9 = (DataTypeDeclaration)var1;
  145.          if (this.isIntrinsicDtName(((BaseDeclaration)var9).getName())) {
  146.             var1.addError(new ParserException(999, "Name should not be an intrinsic datatype name."));
  147.          }
  148.  
  149.          this.checkForErrors(var1, var9.getDataType());
  150.       }
  151.  
  152.       if (var1 == null) {
  153.       }
  154.  
  155.    }
  156.  
  157.    public DataTypeEnumeration getAllTypes() {
  158.       return DataTypeFactory.getTheseTypes(SOX_ALL_TYPES);
  159.    }
  160.  
  161.    public DataTypeEnumeration getSimpleTypes() {
  162.       return DataTypeFactory.getTheseTypes(SOX_SIMPLE_TYPES);
  163.    }
  164.  
  165.    public DataTypeEnumeration getPrimitiveTypes() {
  166.       return DataTypeFactory.getTheseTypes(SOX_ATTR_TYPES);
  167.    }
  168.  
  169.    public DataTypeEnumeration getOtherTypes() {
  170.       Enumeration var1 = super.schema.getDeclarations(Class.forName("com.extensibility.xml.DataTypeDeclaration"));
  171.       return new 1.SOX2DataTypeEnum((SOX2Flavor)null, var1);
  172.    }
  173.  
  174.    private static void loadSoxSourceNames() {
  175.       soxSourceNames = new Hashtable();
  176.  
  177.       for(int var0 = 0; var0 < SOX_ALL_TYPES.length; ++var0) {
  178.          soxSourceNames.put(BaseFlavor.getDisplay(NAME, SOX_ALL_TYPES[var0]), SOX_ALL_TYPES[var0]);
  179.       }
  180.  
  181.    }
  182.  
  183.    public boolean isKnownDisplay(String var1) {
  184.       if (soxSourceNames == null) {
  185.          loadSoxSourceNames();
  186.       }
  187.  
  188.       String var2 = (String)soxSourceNames.get(var1);
  189.       return var2 == null ? false : DataTypeFactory.isKnown(var2);
  190.    }
  191.  
  192.    public DataType createDataTypeFromDisplay(String var1) {
  193.       if (soxSourceNames == null) {
  194.          loadSoxSourceNames();
  195.       }
  196.  
  197.       String var2 = (String)soxSourceNames.get(var1);
  198.       if (var2 == null) {
  199.          var2 = var1;
  200.       }
  201.  
  202.       return DataTypeFactory.createDataType(var2);
  203.    }
  204.  
  205.    public boolean isSupported(String var1) {
  206.       return !var1.equals("GESTALT_LOCAL_TAG") && !var1.equals("GESTALT_EXTENDS") && !var1.equals("GESTALT_MIN_MAX_OCCURS") && !var1.equals("GESTALT_MULTI_INSTANCE_MODULES") && !var1.equals("GESTALT_FACET_DECIMALS") && !var1.equals("GESTALT_FACET_DIGITS") && !var1.equals("GESTALT_FACET_MIN") && !var1.equals("GESTALT_FACET_MAX") && !var1.equals("GESTALT_FACET_MINEX") && !var1.equals("GESTALT_FACET_MAXEX") && !var1.equals("GESTALT_FACET_MAXLENGTH") && !var1.equals("GESTALT_FORBID_ANY_AND_MIXED") && !var1.equals("GESTALT_SECOND_PASS_VALIDATION") && !var1.equals("GESTALT_TYPE_IN_CONTENT_MODEL") ? super.isSupported(var1) : true;
  207.    }
  208.  
  209.    public URI resolveLogicalBySamePrefix(URI var1, boolean var2) throws FileNotFoundException {
  210.       String var3 = super.schema.getURI().toSource();
  211.       String var4 = super.schema.getNamespace() == null ? "" : super.schema.getNamespace().toSource();
  212.       String var5 = var1.toSource();
  213.       String var6 = var1.getFullName();
  214.       if (var5.startsWith("urn") && !(new URI(var6)).equals(new URI(var5))) {
  215.          String var11 = StringUtilities.stripCommonUpTo(var5, var4, ':');
  216.          int var8 = var11.lastIndexOf(36);
  217.          if (var8 >= 0) {
  218.             var11 = var11.substring(0, var8);
  219.          }
  220.  
  221.          var11.replace(':', System.getProperty("file.separator").charAt(0));
  222.          int var9 = var3.lastIndexOf(System.getProperty("file.separator"));
  223.          if (var9 != -1) {
  224.             var11 = String.valueOf(var3.substring(0, var9 + 1)).concat(String.valueOf(var11));
  225.          }
  226.  
  227.          URI var10 = new URI(super.schema.getURI(), var11);
  228.          return super.resolveLogical(var10, var2);
  229.       } else {
  230.          URI var7 = new URI(super.schema.getURI(), var5);
  231.          return super.resolveLogical(var7, var2);
  232.       }
  233.    }
  234.  
  235.    public URI resolveLogical(URI var1, boolean var2) throws FileNotFoundException {
  236.       String var3 = var1.toSource();
  237.       if (!var3.startsWith("urn")) {
  238.          return this.resolveLogicalBySamePrefix(var1, var2);
  239.       } else {
  240.          Vector var4 = super.schema.getSchemaPaths();
  241.          Vector var5 = new Vector();
  242.          if (var4.isEmpty()) {
  243.             return this.resolveLogicalBySamePrefix(var1, var2);
  244.          } else {
  245.             for(int var6 = 0; var6 < var4.size(); ++var6) {
  246.                var5.addElement(new File((String)var4.elementAt(var6)));
  247.             }
  248.  
  249.             DirectorySearchURIDomain var17 = new DirectorySearchURIDomain(var5, "urn");
  250.             Object var7 = null;
  251.  
  252.             try {
  253.                var18 = new com.commerceone.util.net.URI(var1.toSource());
  254.             } catch (MalformedURIException var16) {
  255.                URI var9 = this.resolveLogicalBySamePrefix(var1, var2);
  256.                return var9;
  257.             }
  258.  
  259.             Object var8 = null;
  260.  
  261.             try {
  262.                var20 = var17.open(var18);
  263.             } catch (IOException var15) {
  264.                URI var10 = this.resolveLogicalBySamePrefix(var1, var2);
  265.                return var10;
  266.             }
  267.  
  268.             Object var21 = null;
  269.             URI var23 = null;
  270.  
  271.             do {
  272.                com.commerceone.util.net.URI var19 = var20.getURI();
  273.                if (var19 != null) {
  274.                   String var11 = var19.getPath();
  275.                   if (var11 != null) {
  276.                      try {
  277.                         String var22 = FileURIDomain.unescape(var11);
  278.                         URI var12 = new URI(new File(var22));
  279.                         if (var12.exists()) {
  280.                            var23 = var12;
  281.                         }
  282.                      } catch (IOException var14) {
  283.                         URI var13 = this.resolveLogicalBySamePrefix(var1, var2);
  284.                         return var13;
  285.                      }
  286.                   }
  287.                }
  288.             } while((var20 = var20.getNext()) != null && var23 == null);
  289.  
  290.             return var23 == null ? this.resolveLogicalBySamePrefix(var1, var2) : var23;
  291.          }
  292.       }
  293.    }
  294.  
  295.    static {
  296.       SOX_ALL_TYPES = new String[]{DataTypeIntf.BOOLEAN, DataTypeIntf.STRING, DataTypeIntf.URI, DataTypeIntf.NUMBER, DataTypeIntf.R4, DataTypeIntf.R8, DataTypeIntf.I4, DataTypeIntf.I8, DataTypeIntf.I1, DataTypeIntf.DATE, DataTypeIntf.TIME, DataTypeIntf.DATETIME, DataTypeIntf.ID, DataTypeIntf.IDREF, DataTypeIntf.IDREFS, DataTypeIntf.NMTOKEN, DataTypeIntf.NMTOKENS};
  297.       SOX_OTHER_TYPES = new String[]{""};
  298.       SOX_SIMPLE_TYPES = new String[]{DataTypeIntf.BOOLEAN, DataTypeIntf.STRING, DataTypeIntf.URI, DataTypeIntf.NUMBER, DataTypeIntf.R4, DataTypeIntf.R8, DataTypeIntf.I4, DataTypeIntf.I8, DataTypeIntf.I1, DataTypeIntf.DATE, DataTypeIntf.TIME, DataTypeIntf.DATETIME};
  299.       SOX_ATTR_TYPES = new String[]{DataTypeIntf.STRING, DataTypeIntf.ID, DataTypeIntf.IDREF, DataTypeIntf.IDREFS, DataTypeIntf.NMTOKEN, DataTypeIntf.NMTOKENS};
  300.       soxSourceNames = null;
  301.    }
  302. }
  303.